#include "headfile.h"

//================================================================//
//  @brief  :		求int平方
//  @param  :		int a
//  @return :		int a^2
//  @note   :		void
//================================================================//
int my_int_pow(int a)
{
	return a * a;
}

//================================================================//
//  @brief  :		求int根号
//  @param  :		int a
//  @return :		int a^1/2
//  @note   :		网上抄的，还挺有用
//================================================================//
int my_int_sqrt(int x)
{
    register unsigned long xr;  // result register
    register unsigned long q2;  // scan-bit register
    register unsigned char f;   // flag (one bit)

    x = (unsigned long)x;

    xr = 0;                     // clear result
    q2 = 0x40000000L;           // higest possible result bit
    do
    {
        if ((xr + q2) <= x)
        {
            x -= xr + q2;
            f = 1;                  // set flag
        }
        else {
            f = 0;                  // clear flag
        }
        xr >>= 1;
        if (f) {
            xr += q2;               // test flag
        }
    } while (q2 >>= 2);          // shift twice
    if (xr < x) {
        return (int)xr + 1;             // add for rounding
    }
    else {
        return (int)xr;
    }
}

//================================================================//
//  @brief  :		求C点余弦值
//  @param  :		PointA,PointB,PointC
//  @return :		float cosC
//  @note   :		void
//================================================================//
float COS_C(Point PointA, Point PointB, Point PointC)
{
	float a, b, c, cosC;
	a = my_int_pow(abs(PointC.Row - PointB.Row)) + my_int_pow(abs(PointC.Col - PointB.Col));
	b= my_int_pow(abs(PointA.Row - PointC.Row)) + my_int_pow(abs(PointA.Col - PointC.Col));
	c= my_int_pow(abs(PointA.Row - PointB.Row)) + my_int_pow(abs(PointA.Col - PointB.Col));

    if(!a||!b)
        return -1;
    cosC = (a + b - c) / (float)(2 * my_int_sqrt(a) * my_int_sqrt(b));
	
    return cosC;
}